package com.cdsxt.util;

import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class StringUtils {
	
	  /**
     * 处理特殊字符串:把非中文，英文下划线数字的内容驱除
     */
    public static String convertTrimSpecialString(String oldString) {
    	Pattern pt=Pattern.compile("[\\u4e00-\\u9fa5_a-zA-Z0-9]+");
    	Matcher mt = pt.matcher(oldString);//";;;'''....131313发大水发..'.'.顺丰1313_++f_==__fsffafas++++=====---"
    	StringBuilder sb=new StringBuilder();
    	while (mt.find()) {
    		sb.append(mt.group());
        }
    	return sb.toString();
    }
    

	/**
	 * 下划线转驼峰：
	 * @param underlineStr 下划线风格多个单词字符串
	 * @param firstWordConvert 首个单词是否转换
	 * @return
	 */
	public static String underlineToCamelStr(CharSequence underlineStr,boolean firstWordConvert) {
		StringBuffer sb = new StringBuffer(underlineStr);
		if (firstWordConvert) {
			String ch = Character.toUpperCase(sb.charAt(0))+"";
			sb.replace(0, 1, ch);
		}
		//利用正则删除下划线，把下划线后一位改成大写
		Pattern pattern = Pattern.compile("_(\\w)");
		Matcher matcher = pattern.matcher(sb);
		if(matcher.find()) {
			sb = new StringBuffer();
			//将当前匹配子串替换为指定字符串，并且将替换后的子串以及其之前到上次匹配子串之后的字符串段添加到一个StringBuffer对象里。
			//正则之前的字符和被替换的字符
			matcher.appendReplacement(sb, matcher.group(1).toUpperCase());
			//把之后的也添加到StringBuffer对象里
			matcher.appendTail(sb);			
		}else {
			return sb.toString();
		}	
		return underlineToCamelStr(sb,false);
	} 
	
	
	/**
	 * 驼峰转下划线
	 * @param camelStr 驼峰风格多个单词字符串
	 * @return
	 */
	public static String camelToUnderlineStr(CharSequence camelStr) {
		StringBuffer sb = new StringBuffer(camelStr);
		String ch = Character.toLowerCase(sb.charAt(0))+"";
		sb.replace(0, 1, ch);
		Pattern pattern = Pattern.compile("[A-Z]");
		Matcher matcher = pattern.matcher(sb);
		if(matcher.find()) {
			sb = new StringBuffer();
			//将当前匹配子串替换为指定字符串，并且将替换后的子串以及其之前到上次匹配子串之后的字符串段添加到一个StringBuffer对象里。
			//正则之前的字符和被替换的字符
			matcher.appendReplacement(sb,"_"+matcher.group(0).toLowerCase());
			//把之后的也添加到StringBuffer对象里
			matcher.appendTail(sb);			
		}else {
			return sb.toString();
		}	
		return camelToUnderlineStr(sb);
	}

	

}
